package com.dwxt.sport.business.service;

import com.dwxt.sport.business.dao.DictValueMapper;
import com.dwxt.sport.business.entity.DictValue;
import com.dwxt.sport.business.vo.SelectDictValueVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 数据字典 Service
 *
 * @author Kuang.JiaZhuo
 * @date 2020-07-27 10:23
 */
@Service
public class DictValueService {

    @Resource
    DictValueMapper dictValueMapper;

    //用于缓存字典项小于150的字典内容
    private static Map<String, List<DictValue>> dicts = new HashMap<>();

    /**
     * @方法名：selectDictByCode
     * @描述： 通过code查询字典列表
     * @作者： kjz
     * @日期： Created in 2020/7/27 20:26
     */
    public List<DictValue> selectDictByCode(String code) {
        List<DictValue> result;
        if (dicts.containsKey(code)) {
            result = dicts.get(code);
        } else {
            result = dictValueMapper.selectDictByCode(code);
            if (result.size() < 150) {
                dicts.put(code, result);
            }
        }
        return result;
    }

    /**
     * @方法名：flushDictCache
     * @描述： 清空数据字典缓存
     * @作者： kjz
     * @日期： Created in 2020/7/27 20:38
     */
    public void flushDictCache() {
        if (dicts != null) {
            dicts.clear();
        }
    }

    /**
     * @方法名：selectDictByParentId
     * @描述： 根据父id查询其字典数据
     * @作者： kjz
     * @日期： Created in 2020/7/27 19:56
     */
    public List<DictValue> selectDictByParentId(String parentId) {
        return this.dictValueMapper.selectDictByParentId(parentId);
    }

    /**
     * @方法名：selectChildDictListByParent
     * @描述： 根据父级的code和value查询其字典数据
     * @作者： kjz
     * @日期： Created in 2020/7/27 21:55
     */
    public List<DictValue> selectChildDictListByParent(String dictCode, String dictValue) {
        return this.dictValueMapper.selectChildDictListByParent(dictCode,dictValue);
    }

    /**
     * @方法名：selectDictByCodeAndValue
     * @描述： 根据字典code和value查询字典信息
     * @作者： kjz
     * @日期： Created in 2020/7/27 22:02
     */
    public DictValue selectDictByCodeAndValue(String dictCode, String dictValue) {
        return this.dictValueMapper.selectDictByCodeAndValue(dictCode,dictValue);
    }

    /**
     * @方法名：selectDictValueByCondition
     * @描述： 后台-按条件查询数据字典列表(带分页)
     * @作者： kjz
     * @日期： Created in 2020/7/27 17:30
     */
    public PageInfo<DictValue> selectDictValueByCondition(SelectDictValueVo selectDictValueVo) {
        PageHelper.startPage(selectDictValueVo.getPageNum(), selectDictValueVo.getPageSize());
        List<DictValue> list = this.dictValueMapper.selectDictValueByCondition(selectDictValueVo);
        PageInfo<DictValue> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * @方法名：updateIsUsing
     * @描述： 后台-更改字典的启用与禁用
     * @作者： kjz
     * @日期： Created in 2020/7/27 12:24
     */
    @Transactional(rollbackFor = Exception.class)
    public int updateIsUsing(String id, String isUsing) {
        return dictValueMapper.updateByPrimaryKeySelective(new DictValue().setId(id).setIsUsing(isUsing));
    }
}
